/*
 * IPricingEngine.h
 *
 *  Created on: Oct 16, 2010
 *      Author: aludin
 */

#ifndef IPRICINGENGINE_H_
#define IPRICINGENGINE_H_

#include "PricingResult.h"
#include "exceptions/InvalidInstrumentException.h"

namespace smartoptions {
class Instrument;
class PricingModel;
class PricingMethod;
class PricingResult;

class PricingEngineRegistry;

class IPricingEngine {

public:

	virtual const char* getId() = 0;
	virtual void init(PricingEngineRegistry& registry) = 0;

	virtual PricingResult* price(Instrument* instrument, PricingModel* model /*contains market data according to a specific model*/, PricingMethod* method)=0;

	// accept default constructor and copy constructor
	virtual ~IPricingEngine();


private:
	// not implemented. Just prohibit assigning the interface.
	IPricingEngine& operator=(IPricingEngine& other);


};

}

#endif /* IPRICINGENGINE_H_ */
